package chan.project.aimodule.Service;

import chan.project.smartlawmodel.dto.ai.TextParseRequest;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;

@Slf4j
@Service
public class TextParseService {

    @Resource
    private ChatClient chatClient;

    public final static String SYSTEM_PROMPT = "你是一个帮助处理法律文件的智能法律助手，我会给你传入一些法律文件内容与用户的要求，请你帮我处理这些问题";

    /**
     * 解析传入的法律文件对象(流式调用)
     * 传入的是文件进行解析之后的对象
     * @param textParseRequest
     * @return
     */
    public Flux<String> parseText(TextParseRequest textParseRequest) {

        PromptTemplate promptTemplate = new PromptTemplate("文件文本内容是 {text} 文件文本类型是{type} 用户问题是：{message}");
        Map<String, Object> promptMap = new HashMap<>();
        promptMap.put("text", textParseRequest.getText());
        promptMap.putIfAbsent("message", textParseRequest.getUserRequire());
        promptMap.putIfAbsent("type",textParseRequest.getTextParseEnum().getName());
        String prompt = promptTemplate.render(promptMap);
        log.info("输入的信息是：{}", prompt);
        Flux<String> content = chatClient.prompt()
                .system(SYSTEM_PROMPT)
                .user(prompt)
                .stream()
                .content();
        return content;
    }

    /**
     * 解析传入的法律文件对象(普通调用)
     * @param textParseRequest
     * @return
     */
    public String parseTextNormal(TextParseRequest textParseRequest){
        PromptTemplate promptTemplate = new PromptTemplate("文件文本内容是 {text} 文件文本类型是{type} 用户问题是：{message}");
        Map<String, Object> promptMap = new HashMap<>();
        promptMap.put("text", textParseRequest.getText());
        promptMap.putIfAbsent("message", textParseRequest.getUserRequire());
        promptMap.putIfAbsent("type",textParseRequest.getTextParseEnum().getName());
        String prompt = promptTemplate.render(promptMap);
        log.info("输入的信息是：{}", prompt);

        return chatClient.prompt()
                .system(SYSTEM_PROMPT)
                .user(prompt)
                .call()
                .content();
    }
}
